//
// Created by Crestimes on 24-6-2.
//

#include "Production.h"

string Production::toString(const bool& addExpectationSet) const {
    // 将文法句子的所有符号和expectationSet中所有符号(如果有)名称拼接成字符串返回
    // 还需要拼接.的下标，下标不同也是不同的点
    string str = left->name;
    for (const auto& c : right) {
        str += c->name;
    }
    // 点的下标在字符串中需要比expectationSet前一点，这样在没有使用expectationSet作为字符串比较的情况下的set和使用的情况下的set遍历出元素的顺序才一样
    str += to_string(pointIndex);
    if (addExpectationSet) {
        // 如果字符串还要包含,后面的expectationSet
        if (!expectationSet.empty()) {
            for (const auto& c : expectationSet) {
                str += c->name;
            }
        }
    }
    return str;
}
